package controladores;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import modelos.MCategoria;
import modelos.MFabrica;
import vistas.VCategoria;


public class CCategoria implements ActionListener{

    private VCategoria vista;
    /*Patron de Estrategia (comportamiento) 
      ya que declaramos el modelo del tipo MFabrica, pero la instanciamos
      de tipo MCategoria, de tal forma que se pueden llamar los metodos de
      MFabrica y los de MCategoria a traves de los mismos metodos sin necesidad
      de declarar un pobjeto de mas.
   */
    private MFabrica modelo;

    public CCategoria(VCategoria vista) {
        this.vista = vista;
       modelo = new MCategoria();
    }

    public void actionPerformed(ActionEvent ae) {
        if(ae.getActionCommand().equals("Registrar")){
                registrar();
                 
        }
        else if(ae.getActionCommand().equals("Consultar")){
            consultar();
        }
        else if(ae.getActionCommand().equals("Eliminar")){
            eliminar();
            vista.reiniciar();
        }
        else if(ae.getActionCommand().equals("Actualizar")){
                actualizar();
                vista.reiniciar();
        }
        else if(ae.getActionCommand().equals("Salir")){
            vista.setVisible(false);
            vista.reiniciar();
        }
        else{
            vista.reiniciar();
        }            
    }

   public void registrar(){
	   
       ((MCategoria)((MCategoria)modelo)).setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
       if(vista.validarCamposVacios())
           if(((MCategoria)modelo).validarCodigo("Categoria"))
               if(((MCategoria)modelo).validarDescripcion("Categoria", vista.getTxtDescripcion().getText().toUpperCase())){
                   ((MCategoria)modelo).setDescripcion(vista.getTxtDescripcion().getText());
                   ((MCategoria)modelo).setEstatus("A");
                   if(((MCategoria)modelo).registrar()){
                       JOptionPane.showMessageDialog(new JFrame(),"La categoria se ha registrado exitosamente","Comida Rapida",JOptionPane.INFORMATION_MESSAGE); 
                       vista.reiniciar();
                   }
               }
               else
                   JOptionPane.showMessageDialog(new JFrame(),"La descripcion ya se encuentra registrada","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
            else
                JOptionPane.showMessageDialog(new JFrame(),"El codigo ya se encuentra registrada","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
       else;
            
   }

   public void consultar(){
       if(!vista.getTxtCodigo().getText().isEmpty()){
           ((MCategoria)modelo).setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
           ((MCategoria)modelo).setEstatus("A");
           if(((MCategoria)modelo).consultar()){
                vista.getTxtCodigo().setEditable(false);
                vista.getTxtDescripcion().setText(((MCategoria)modelo).getDescripcion());
            }
           else
               JOptionPane.showMessageDialog(new JFrame(),"El codigo ingresado no pertenece a ninguna categoria","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
        }
       else
           JOptionPane.showMessageDialog(new JFrame(),"El campo codigo esta vacio","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);

   }

    private void eliminar() {
       if(!vista.getTxtCodigo().getText().isEmpty()){
           ((MCategoria)modelo).setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
           if(((MCategoria)modelo).eliminar())
               JOptionPane.showMessageDialog(new JFrame(),"La categoria se ha eliminado exitosamente","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
           else
               JOptionPane.showMessageDialog(new JFrame(),"El codigo ingresado no pertenece a ninguna categoria","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
        }
       else
           JOptionPane.showMessageDialog(new JFrame(),"El campo codigo esta vacio","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);

    }

    private void actualizar() {
       if(vista.validarCamposVacios())
               if(((MCategoria)modelo).validarDescripcion("Categoria", vista.getTxtDescripcion().getText().toUpperCase())){
                    ((MCategoria)modelo).setCodigo(Integer.parseInt(vista.getTxtCodigo().getText()));
                    ((MCategoria)modelo).setDescripcion(vista.getTxtDescripcion().getText().toUpperCase());
                    if(((MCategoria)modelo).actualizar())
                        JOptionPane.showMessageDialog(new JFrame(),"La categoria se ha actualizado exitosamente","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
                    else
                        JOptionPane.showMessageDialog(new JFrame(),"El codigo ingresado no pertenece a ninguna categoria","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
                 }
                 else
            JOptionPane.showMessageDialog(new JFrame(),"La descripcion ya se encuentra registrada","Comida Rapida",JOptionPane.INFORMATION_MESSAGE);
          
    }

}
